package src.main.BehavioralPatterns.Iterator;

public class LibrarySystem {
    public static void main(String[] args) {
        // 创建图书馆实例
        Library library = new Library();

        // 创建并填充普通书架
        BookShelf shelf1 = new BookShelf();
        shelf1.addBook(new Book("Java核心技术", "Cay S. Horstmann"));
        shelf1.addBook(new Book("算法导论", "Thomas H. Cormen"));
        shelf1.addBook(new Book("设计模式", "Erich Gamma"));

        // 创建并填充古籍区
        AncientBooksCollection ancientBooks = new AncientBooksCollection();
        ancientBooks.pushBook(new Book("史记", "司马迁"));
        ancientBooks.pushBook(new Book("论语", "孔子"));
        ancientBooks.pushBook(new Book("道德经", "老子"));

        // 将两个不同的书籍集合添加到图书馆
        library.addCollection(shelf1);
        library.addCollection(ancientBooks);

        // 遍历图书馆所有书籍（统一接口访问不同结构）
        library.listAllBooks();

        // 单独演示书架迭代器的删除功能
        System.out.println("\n=== 单独遍历书架书籍（带删除功能）===");
        Iterator<Book> shelfIterator = shelf1.createIterator();
        while (shelfIterator.hasNext()) {
            Book book = shelfIterator.next();
            System.out.println(book);
            // 删除特定书籍（算法导论）
            if ("算法导论".equals(book.getTitle())) {
                shelfIterator.remove();  // 使用迭代器删除当前元素
                System.out.println("已删除《算法导论》");
            }
        }

        // 展示删除算法导论后的书架内容
        System.out.println("\n=== 删除算法书后书架书籍 ===");
        shelfIterator = shelf1.createIterator();
        while (shelfIterator.hasNext()) {
            System.out.println(shelfIterator.next());
        }

        // 尝试删除古籍（应抛出异常）
        System.out.println("\n=== 尝试删除古籍 ===");
        try {
            Iterator<Book> ancientIterator = ancientBooks.createIterator();
            ancientIterator.next();
            ancientIterator.remove();  // 尝试删除古籍
        } catch (UnsupportedOperationException e) {
            System.out.println("操作失败：" + e.getMessage());
        }
    }
}
